/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import dao.UsuarioDAO;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import model.TipoUsuario;
import model.Usuario;

/**
 *
 * @author Wagner Segato dos Santos
 */
public class UsuarioBean {

    // Atributos
    private Usuario usuario;
    private Usuario selecionado;
    private List<Usuario> lista;

    /** Creates a new instance of UsuarioBean */
    public UsuarioBean() throws Exception {
        usuario = new Usuario();
        lista = UsuarioDAO.getListaUsuario();
    }

    /** Getters and Setters */
    public Usuario getSelecionado() {
        return selecionado;
    }

    public void setSelecionado(Usuario selecionado) {
        this.selecionado = selecionado;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public List<Usuario> getLista() {
        return lista;
    }

    /** Preparar formulário para inserir dados no banco  */
    public String prepararInserir() {
        usuario = new Usuario();
        return "form?faces-redirect=true";
    }

    /** Preparar registro para atualizar os dados do banco */
    public String prepararAlterar() {
        if (selecionado != null) {
            usuario = selecionado;
            return "form?faces-redirect=true";
        } else {
            erro("Selecione um registro na tabela");
            return "list";
        }
    }

    /** Preparar registro para excluir os dados do banco */
    public String prepararExcluir() {
        if (selecionado != null) {
            usuario = selecionado;
            alerta("Deseja realmente excluir esse registro?");
            return "list";
        } else {
            usuario = new Usuario();
            erro("Selecione um registro na tabela");
            return "list";
        }
    }

    /** Excluir registro do banco */
    public String excluir() {
        try {
            if (usuario.getId() != null) {
                UsuarioDAO.excluir(usuario);
                lista = UsuarioDAO.getListaUsuario();
                info("Sucesso ao excluir registro");
            }
            return "list";
        } catch (Exception e) {
            selecionado = new Usuario();
            erro("Erro: " + e.getMessage());
            return "list";
        }
    }

    /** Salvar registro no banco */
    public String salvar() {
        try {
            if (usuario.getId() == null) {
                UsuarioDAO.inserir(usuario);
                usuario = new Usuario(); // Limpa os dados do último objeto selecionado
            } else {
                UsuarioDAO.atualizar(usuario);
                usuario = selecionado; // Mantem os dados do último objeto selecionado
            }
            lista = UsuarioDAO.getListaUsuario(); // Atualiza a lista de usuários
            info("Sucesso ao salvar registro");
            return "form";
        } catch (Exception e) {
            erro("Erro: " + e.getMessage());
            return "form";
        }
    }

    /** Exibir mensagens no sistema */
    private static void exibirMsg(String summary, String detail, FacesMessage.Severity severity) {
        FacesMessage facesMessage = new FacesMessage(severity, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
    }

    /** Preencher mensagem de informação */
    public static void info(String detail) {
        String summary = "";
        exibirMsg(summary, detail, FacesMessage.SEVERITY_INFO);
    }

    /** Preencher mensagem de erro */
    public static void erro(String detail) {
        String summary = "";
        exibirMsg(summary, detail, FacesMessage.SEVERITY_ERROR);
    }

    /** Preencher mensagem de alerta */
    public static void alerta(String detail) {
        String summary = "";
        exibirMsg(summary, detail, FacesMessage.SEVERITY_WARN);
    }

    /** Pegar os valores da classe TipoUsuario */
    public TipoUsuario[] getTipoUsuarioValues() {
        return TipoUsuario.values();
    }
}
